{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#  导入必要的工具包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "tf.logging.set_verbosity(tf.logging.INFO)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 查看Mnist数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From <ipython-input-2-b0ffac263758>:1: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "WARNING:tensorflow:From /home/surfman/.local/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please write your own downloading logic.\n",
      "WARNING:tensorflow:From /home/surfman/.local/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-images-idx3-ubyte.gz\n",
      "WARNING:tensorflow:From /home/surfman/.local/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-labels-idx1-ubyte.gz\n",
      "Extracting ./t10k-images-idx3-ubyte.gz\n",
      "Extracting ./t10k-labels-idx1-ubyte.gz\n",
      "WARNING:tensorflow:From /home/surfman/.local/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "(55000, 784)\n",
      "(55000,)\n",
      "(5000, 784)\n",
      "(5000,)\n",
      "(10000, 784)\n",
      "(10000,)\n"
     ]
    }
   ],
   "source": [
    "mnist = input_data.read_data_sets(\"./\")\n",
    "\n",
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 查看train训练集里的数据 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,8))\n",
    "\n",
    "for idx in range(16):\n",
    "    plt.subplot(4,4, idx+1)\n",
    "    plt.axis('off')\n",
    "    plt.title('[{}]'.format(mnist.train.labels[idx]))\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28,28)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 理解:train训练集上的数据是随机排列的 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 查看0~9手写数字 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjgAAAD3CAYAAAAQVC6+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAHuxJREFUeJzt3XeYlcXZx/Gh996DwFLF0EQWgUtAFKmCXhCKkRYLXVSwEESJsCBIEQgtIChNjBilaozS5IIYCEVADUQUSKQtJQEpCwj7/vEmd+4Z9xzPLqfsmf1+/vpN5tnnTHi2jM+0bKmpqQYAAMAn2WPdAAAAgHCjgwMAALxDBwcAAHiHDg4AAPAOHRwAAOAdOjgAAMA7dHAAAIB36OAAAADv0MEBAADeyZmei0uWLJmakJAQoaYgmMOHD5vTp09nu9n78Axjh2cY/3iG8Y9nGP9CfYbp6uAkJCSYHTt2ZLxVyLDExMSw3IdnGDs8w/jHM4x/PMP4F+ozZIgKAAB4hw4OAADwDh0cAADgHTo4AADAO3RwAACAd+jgAAAA79DBAQAA3knXPjgAEIqUlBSrvGrVKsl//etfJU+ZMsW6Llu2/+3dlTdvXqvu1KlTkgsUKBCWdgLwF29wAACAd+jgAAAA79DBAQAA3mEOzn9cu3ZN8meffWbVHT58WHKfPn2sujp16kieOXOm5Lvuusu6LkeOHOFoJpBpnD592ir36tVL8r59+6y648ePp3kPPefGLV+5csWq0/ds3Lhx+hqbhenfbcYYk5ycLHn58uVW3a5duyQvXbo04D0ffPBByR07drTq9PdB7ty509dYIIx4gwMAALxDBwcAAHgnSw1R6aWr/fr1C1j33nvvBbxH9ux2n/DLL7+U3KFDB8l6SasxDFHdjO3bt0seP3685IkTJ1rXVa9ePWptyirOnj1rlfW/+ezZs626ixcvBrxPq1atJPfu3VtykyZNrOuGDh0qec2aNelrbBZz48YNq6x/58ydO1fy4sWLreu+/fbbkO5fsGBBq1ysWDHJetn/6tWrresmT54seefOnVZd/vz5Q/psZJz+vnCHGR955BHJCxculNyjRw/rOvfvXLzy4/8FAACAQgcHAAB4hw4OAADwjvdzcPT4sB4b3rp1a8j3KFWqlORBgwYFvO6Xv/yl5Dx58oR8fwT3yiuvSF67dq3kunXrWteNHj06am3ymR7Df+ihh6y69evXS65Zs6ZV1717d8mtW7e26urXry852M9Gy5YtJX/yySdW3c9//vNgzc5y3OMwmjVrJvngwYMBv04fc5GQkGDVjRw5UrK7FF9fq38O3a0zDhw4ILlt27ZW3ebNmwO2C+GxYcMGyY8++qhVp7dheO655yR36dLFui5fvnwRal108QYHAAB4hw4OAADwjhdDVOfOnZP8xhtvWHXPP/+8ZHdZpVauXDnJ7q6rpUuXlvzkk09adXr5d6FChUJsMZB56SWieijCGGOuX78uOWdO+9dHrly50v1Z7m7F06dPl+xurVC4cOF0399n7pJrvdPzBx98IPn777+3rtO7rFerVi1Dn623xHj11VetOr0Fx1dffWXVHT16VHL58uUz9NkILtg2J9qoUaMkR3tI6vLly5LdbQb0Ltl58+a9qc/hDQ4AAPAOHRwAAOAdL4ao9IGX+hWoS79Sf+2116y6du3aSXZ3xNW7FZcoUcKqa9++vWR2Xo2M+++/X7I7ZILIivRhiYcOHQpY1qt98NP06rTOnTtH7XPdXXBffvllyceOHbPqzpw5I5khqvCYMmWKVZ43b55k9zBbrVOnThFrk8td8ad3QR8+fLhV9+abb0rWB7dmBG9wAACAd+jgAAAA79DBAQAA3ombOTj6BGJ36eHJkycDfl3Tpk0lJyUlSW7evLl13aVLlyRXqlTJqjty5EjA+2/atEmyPrW3Z8+e1nW+nM4aC3pJ6sCBAyX/9re/ta574oknJOvdpxGfbr311lg3ASFwtwfQv3Pd39U1atSISpt8d+LECcnjxo0L+ev0kv4yZcqEtU3BuG0cP358wGuD/T1PL/7qAgAA79DBAQAA3sm0Q1R6abYxxnz88ceST506FfDr9BCGMfYwRrBhIr0rqB52MsaYd999V7LeGdkYe2jrkUcekdytWzfrupvdkRE/dv78eav873//WzJDVPHB3QVX0z9PyLz0sl5jjFm+fLlkPWxsDL8HM+qHH36wypMmTZKsd/I3xt6xX2+xYYwxzzzzTARal7Z169ZJ1gcmu9xdlIMdaJ1evMEBAADeoYMDAAC8QwcHAAB4J1PNwdmzZ4/kFi1aWHXufAtNH8/gHqWQkeXZFStWtMpDhw6VfPXqVavuxRdfTPMe7vbT+pRkRIaeH7VixYoYtgTBbN68WfKiRYusupo1a0ru27dv1NqEn6aPXbjvvvsku8t69QnlkydPjnzDsoA///nPVln/PXGPYxgyZIjkMWPGRLZhjosXL0pu06aNZLeNhQsXlqzn1xpjz4e9WbzBAQAA3qGDAwAAvBPzIar9+/dL1kvagg1JuUvB9bCUu6tmOOhhLneHYr0MPTk5WbJesgxkdXpoN9hS1dGjR0uOxM8yjPnLX/4i+bvvvgt43datW62yXg6ulya7ww/6BPrVq1dbda1atZJcpEiREFucNV25ckWyPqH9pzz88MOSixYtGs4m/cj3339vlfWu88EsW7ZMcmJiYljbpPEGBwAAeIcODgAA8A4dHAAA4J2oz8H54osvrHKDBg0ku9tRa//85z8lly1b1qqL5kndFSpUsMp6uZuegwPgf/TpwTt37pTcpUsX67quXbtGrU2+uXz5smQ9n3HHjh3Wdfp4Gb2tf7joZePukTW1a9eWvGXLFqtO/y6FMdOmTZOst1ZwDRs2zCo3btw44LX6dPcqVapIdueMvv7665Ldv2t6HuqIESOsOnfe1n/Nnz/fKt9zzz0B2xhOvMEBAADeoYMDAAC8E/UhqokTJ1rlQMNSOXPaTdNLRqM5JOVyXxUeP348zev0Ukkgq/noo4+ssj5NWC8rDnaaONJHD1G5w1JasJ1i9c7s7du3t+r08FIwmzZtkuyeZr1v3z7JjRo1sur08vWsuoRc7wQ8duzYkL5m3rx5Ae/hDi99+OGHkvWQoF6SbkzwbQCWLFki+cKFCwHb1aNHD8nu9iru3/dI4Q0OAADwDh0cAADgnZjvZKzp15J/+tOfrLpSpUpFuzkiJSVF8oIFC6w6/TpQmzFjRkTblJUMGDBAcmpqqmR3BcicOXOi1ib8mH4e7s+JHoru06eP5MqVK0e+YVlE8eLFJQfbCT7S9EHJp06dsuo6duwoeePGjVZd06ZNJW/btk1yOA9fzOweeOAByXq1WzDubsKzZ8+WHGw6h/675ipTpozk8uXLW3W7du0KqV2LFy8O6bpI4g0OAADwDh0cAADgHTo4AADAO5lqDk69evUkN2zYMIYtsR07dkzy0qVLrbo8efJILl26tGR3aR0yTv9b6lypUiXrOv0sEH1JSUmS33//favurrvuksz8tKzDnT+jTxdv0qSJVad3uddzd9yfc5/t379fckb/huh5N+6/f/369dP8mmbNmlllvby/efPmVp1uV8mSJa26xx57LH2NjTDe4AAAAO/QwQEAAN6JyhCVPnxNH/bleuONN6LRnDRdvXpV8rvvvmvV6d09XS1btpS8Zs2a8DcMAenlxsYYU6xYsRi1JGt6/vnnrfLMmTMlFypUKGBdgQIFItswZFr62buHQuohqlmzZkl2d7/32Z49eyTrv5v6sGlj7N2Ehw4datXly5dPsjtEFWhbBvewTXeX6UBGjRpllQcNGhTS10ULb3AAAIB36OAAAADv0MEBAADeicocnAMHDkjevXt3ND7yJ7nbVOsxzt69ewf8unLlylnl6dOnh7dhQCY2f/58ye7RGHr56Pr16626unXrpvuz9PEOxhhz7do1ye5RLoG2ne/cubNVzp07d7rbgcgYPHiwVdbfW1mVXnatc61atazr2rZtG9bPfeWVV6zywYMHJbvL1YcPHy65b9++YW1HuPEGBwAAeIcODgAA8E5Uhqhq1Kgh2X1VvXfvXsnvvPOO5F//+tdhb8f169cl9+/f36pzdyjW9LDUp59+atVVqVIlTK0DMh/3pOLnnntOsnua++bNmyU3aNAgpPtfvHjRKr/++uuS9e8DY4zZvn17SPfUVq1aZZU7dOiQ7nsgMhiSiq0pU6ZInjZtWsDrypYta5WHDRsmOVeuXOFvWBjxBgcAAHiHDg4AAPAOHRwAAOCdqMzB0WN4derUser0HJzf/OY3Ae/RrVu3DH32zp07JY8cOVLyN998Y12nT6LWxy8YYy8FZ85N5jFw4MBYN8FLeq6ae8rw+fPnJest4Y2x57u428cH2h5Cf5Yxxly5ciWkNup5fcYYU7VqVcn6Z7Rhw4Yh3Q/RoedpLVq0KOB1AwYMiEZzspzTp09L1nNw3J9DPb/u9ttvt+pKlCgRodaFH29wAACAd+jgAAAA70RliCpUeudSPZyUVjncJkyYIPnJJ5+M6GchPNzliwiPrVu3St63b1/A6y5fvmyVx40bl+7PSkhIsMotWrSQ3KtXL6tOD2+7J5LnzZs33Z+dVehTuo0xZt26dZITExOtuqZNm6b7/ocOHbLKehdc9xTsp556SrK7RUD16tUllylTJt3twI+dO3fOKj/xxBOSk5OTJbu7FRcvXlxysC1UMjve4AAAAO/QwQEAAN6J+hCVu3ulXgnzwAMPSD579mxYPu+WW26R3Lp1a8kzZsywruMQvvijhxWNiczu11lRsFUS+oDEYD8z7hBDx44d07yuZs2a6WwdQnH8+HHJ7koyvVLNHdrTQxPBpKamStYr64z58dBTINWqVbPKW7ZskewOQSJjlixZYpX/8Ic/pHmdHh40xpiXXnpJctGiRcPfsCjhDQ4AAPAOHRwAAOAdOjgAAMA7UZ+D447bN2nSRPJ7770n+Z577gn5nnqMedKkSVadPgncHfNFfOvXr1+sm+ClWrVqSXZ3OEV8KFiwoOTKlStbdfv375eckpJi1R07diyk++fM+b8/HRMnTgx4XefOna2y3tohe3b7v6/1PZFxevuGpKSkkL5m5syZVtndzT9e8QYHAAB4hw4OAADwTqZ6J9i8eXPJvBrHTwl1SSuQ1RQqVEjyV199FcOWINr00F/v3r2tuqlTp0rWh53ee++9kW9YDPAGBwAAeIcODgAA8A4dHAAA4J1MNQcHSMvKlStj3QQAiAt58uSR7G6b4pZ9xxscAADgHTo4AADAO3RwAACAd+jgAAAA79DBAQAA3qGDAwAAvEMHBwAAeIcODgAA8A4dHAAA4J1sqampoV+cLdspY8yRyDUHQVRKTU0tdbM34RnGFM8w/vEM4x/PMP6F9AzT1cEBAACIBwxRAQAA79DBAQAA3qGDAwAAvEMHBwAAeIcODgAA8A4dHAAA4B06OAAAwDt0cAAAgHfo4AAAAO/QwQEAAN6hgwMAALxDBwcAAHiHDg4AAPAOHRwAAOAdOjgAAMA7dHAAAIB36OAAAADv0MEBAADeoYMDAAC8QwcHAAB4hw4OAADwDh0cAADgHTo4AADAO3RwAACAd+jgAAAA79DBAQAA3qGDAwAAvEMHBwAAeIcODgAA8A4dHAAA4B06OAAAwDt0cAAAgHfo4AAAAO/QwQEAAN7JmZ6LS5YsmZqQkBChpiCYw4cPm9OnT2e72fvwDGOHZxj/eIbxj2cY/0J9hunq4CQkJJgdO3ZkvFXIsMTExLDch2cYOzzD+MczjH88w/gX6jNkiAoAAHiHDg4AAPAOHRwAAOAdOjgAAMA7dHAAAIB36OAAAADv0MEBAADeSdc+OEBmNnPmTMlDhgyx6kqUKCF5xYoVVl2zZs0i2zAAQNTxBgcAAHiHDg4AAPAOHRwAAOAd5uAgbp0/f94qL1y4UHKjRo2sujVr1kj+17/+FdF2AQBijzc4AADAO3RwAACAdxiiQtyaM2eOVd69e7fkMWPGWHWlSpVKMwNZTffu3SUXL17cqnN/prTr16+nmS9dumRdV7hwYcnZs/Pf0IgdvvsAAIB36OAAAADv0MEBAADeYQ7Of1y9elXyvn37rLpatWpJzps3b4buf+7cOckHDx606vSckIoVK2bo/lmFXhq+cuVKq27gwIGSR44cGbU2AfEkd+7ckrds2WLVXbhwQfK0adOsuvnz50v+xz/+EfD+q1evltyhQ4cMtxPht23bNsn69+WePXus61JTUyVny5YtYN306dOtOveInFjjDQ4AAPAOHRwAAOAdhqj+o3///pIXLVpk1S1fvlxytWrVrLqvv/5asn79p1/TGmPMkSNHJF+7ds2qy5EjR8A6GHPlyhXJtWvXlnz06FHruokTJ0atTVmFu1v0mTNnMnSfQ4cOSa5cuXLA69544w3JU6ZMser06++iRYtadcOGDZOcJ0+eDLUxq9DDt3Xq1LHq9BLvnj17WnUffvihZL38e/bs2dZ13bp1k/ztt99adWXLls1Ai5Ee+u/Q22+/bdXpn6+LFy9KdoehtGB1Q4cOtcrffPONZHeIMxZ4gwMAALxDBwcAAHgnyw5Rff7551Z57dq1Aa/Vr1wjwX0VDNuBAwck62Gphg0bWtc1btw4am2Kdzdu3LDK+vt/3Lhxkt3VMidOnIhou/TQh7tiMdgQpB7GfPnll8PeLp/UrFlTcpUqVaw6PeSelJRk1VWqVCnN+7n/3jNnzpTs7nKM8NDPyf250MNQesWTMfZwU/78+SW7v0uD2bRpU8C6zZs3S9bTLXLlyhXy/cOJNzgAAMA7dHAAAIB36OAAAADvZKk5OHrJ63333WfVnT179qbvr8eomzRpYtU9/PDDkhMTE606Tre2paSkWOWWLVtKLlCggOSpU6da18VqnDceuXPOHnzwwTSvc+fB/OIXvwh4z1tvvVVymzZtrLq33npLsl5qXq9ePeu6rl27Sq5atapVN3nyZMkvvPCCVReOn9+s6NFHH7XKesl33759rTq99YX+vtDbXCAy3LlM+jnpOTfGBF/Wfccdd0ieNWuW5DvvvDPktuid/tu2bWvV6R2RBw8eLHnevHkh3z+ceIMDAAC8QwcHAAB4J0sNUT399NOS3VfaeuhDD4kYY0z79u0ld+rUKeDX6Ve17KaacTt37rTK+lk9+eSTkt1hQISuadOmVnndunWSy5cvL7lcuXLWdUWKFMnQ5zVv3jzdX6MPwDXGmE8++STgtX369En3/WHM8OHDrXK7du0kuwdlTpgwQbJeGj5nzhzrOr1bcYUKFcLRzCzvqaeessrBloLXr19fst592hhjSpcufdNt0btft2jRwqpbtmyZ5AULFkhmiAoAACBM6OAAAADv0MEBAADe8W4Ojt6y3Rh7eerSpUsDft3u3bsluyeGI/L00QHu8u9ixYpJnjRpUtTa5LPixYtbZXfeWWbg/ixv3LhRsp77ZsyP5wohY+rWrSt54cKFVl3r1q0lN2vWTPKiRYus61577TXJbN2QcfPnz5fsLgXXy73dpdrPPvus5IzOmQtGL1k/fvy4VaePWtHL1ZOTk63rwjEXKBS8wQEAAN6hgwMAALzjxRDVl19+KXnkyJFWnd59M5i9e/dKZogq+pYsWSJ5xYoVVt2AAQMk58zpxbcsAtAnEOtX7a5PP/3UKv/sZz+LWJuyqnvvvdcq612PO3bsKPn69evWde4WBAid/jvUv39/ye5S8N69e0seMmRI5Bum6Oerdy425sft/K9oDUm5eIMDAAC8QwcHAAB4hw4OAADwTtxMaNBLRseNG2fVjR8/XrI7HhyqQYMGSdbLIY0xpmDBghm6JwLTy8KNMWblypWS3TlQSUlJUWkTYm///v2Sg23vftttt0WjOVD0VgJ6CXPhwoWt60qUKBG1Nvlm+fLlkvUya338gjH2vMRI08/aGHveTagnl8cKb3AAAIB36OAAAADvZNohKncX08TERMl6WbjL3eF0zJgxkvUunT179rSuO3nypOTz589bdQxRhV9KSopV1sv5c+fObdXVqFEjpHuOHTtWcjRf4SJ83J89TQ9Z5cuXLxrNydIuXLhglUePHi1ZD1etX7/eum7KlCmSX3zxxQi1zg96V2BjjHnllVck61PZZ82aZV0Xjh2ir169Kln//TPG/rvp7qIcaCm4McbcfffdkteuXXuzTbxpvMEBAADeoYMDAAC8k2mHqHr16mWVQx2W2rBhg1XXsGHDNL9Gv0ozxp697r42RPjpA/lc+nBNYwI/w82bN1vlZ555RrK76qBRo0bpbSKiwF31+NJLL0l2dz/Vw8rBVm8g4/Tqxscff9yq++GHHyS///77krdt22Zd16pVK8kPPfSQVccu8bajR49aZf19rXPlypXD/tmDBw+W/Oabb1p1ehgq2M+aW6d3H8+fP//NNvGm8QYHAAB4hw4OAADwDh0cAADgnZjPwTl79qxkPffigw8+CPg1evmcMcasWrVKcqD5GunhnlTMuHH4LViwIGDdqFGjrHKgJd+nT5+2ylOnTpWsl1saY3+PIPPQc9+MMWbjxo2S+/XrZ9WxNDzy5syZI3nFihVWXXJysuRChQpJvueee6zr9Cnkr776qlU3d+5cydmz89/X1atXt8p67suJEyck79ixw7quffv2Ae+pn5O+hzH271a9NYc7lybYUnBdV6ZMGatOb+eSGfAdBgAAvEMHBwAAeCfmQ1QlS5aUrJch/v73v7euO3DggOT+/ftbdfp1aTB6SerevXsDXteuXbuQ7ofI0MtMg9HfO8YY8/XXX0eiOQgz/Yp78eLFVp1+Ve4OVSL8du7caZX1zsNvvfWWVVekSJE075EjRw6rPH36dMnulIERI0ZIrlKlSvoamwUEWib+9NNPW9dNnjw54D30cNbFixdDur87RKWHivWQo0s/a2N+vLVDrPEGBwAAeIcODgAA8A4dHAAA4J2Yz8HR4/FLly6V7B7V0LFjx5v+LL38e//+/VZdxYoVJYc6pwfpc+jQIcmnTp2y6goXLizZPRE+ED0vyxh7KXjbtm0z0kREwfz58yV/9NFHVp3e2r98+fJRa1NWouc6Tps2zarTy7q7dOmSofvXrl1bsruEXJ807p6QDfsIIT2X5uDBg9Z133zzjWR3SbeeT+PW6WXdn3/+ecB26K1Y3Pk5+m+nu8w9s+ENDgAA8A4dHAAA4J2YD1Hp3Yt/9atfST527Jh13dChQyXnyZMn5PufOXNGco8ePSTnzGn/X1+yZIlkhqgiI1euXJLdXUzr1q0r2d2pOpCkpCSrrF+916tXLyNNRBT87W9/C1h3++23R7ElWdM777wjeevWrVZduIeN9HCVMcZs2LAhrPf3jf732b59u+RBgwZZ1wUbXrrjjjsk9+7d26rTZb3s3z0RPtgScr0dB0NUAAAAUUYHBwAAeIcODgAA8E7M5+B89913kvU2zy+88IJ1nT512K3TJ5J//PHHVt0f//hHydeuXZP89ttvW9c1a9YsPc1GBtxyyy2SS5QoYdWlpKRIvnz5slV34cIFyWPHjpXsPsNhw4ZJHj169M01FmF148YNyfoUY3cuXOfOnaPWpqxK/7589tlnrTq9XQNi684775TsniYeDufOnZPcqVMnq04vL3/sscesumAnmWc2vMEBAADeoYMDAAC8E/Mhqvz580v+7LPPJOulbsbYy+K6desW8v3z5s0rWZ9QzqvwzEW/gnWf/d///vc0v0YPSRljzIQJEyS7SxsRW/oZ6l1Y3Z/DzL7s1Dfffvtt2O95/fp1yZs3b7bqBgwYEPbPQ8a0bNlScnJyslX3+OOPS47nHad5gwMAALxDBwcAAHgn5kNUWp06dSS7r8WGDx8u+fz581adXokxYsQIq+6pp56SrHdNRmwtW7YsYHn27NlWnR5mnD59umS987UxxuTIkSOMLUQ49evXL83/Xe8ujui4//77Jbdo0cKqGzdunOT07BivLVq0SPIXX3xh1TE1ILb0LsS7du2S7A7p6xVcegf6eMMbHAAA4B06OAAAwDt0cAAAgHcy1RwczR2z1+W9e/dadRUrVpRctGjRyDYMYdGkSZOA5RkzZkS7OQgzfbK7McZcunQpzevYQTz6EhISJLdp08aqe/PNNyWHuqRbb+9hjL2L+Jo1a6y64sWLh9pMRICeg6Pn3bhbc+hl4vGMNzgAAMA7dHAAAIB3Mu0QVTB169aNdRMABHH8+HGrvHPnzjSvO3LkiFUuVapUxNqE/5c9+//+u3bUqFFWXWJiouS1a9dadVWrVpWsdyv+3e9+Z12nD0N2l6EjuvSBmsbYQ09333235Llz50atTdHEGxwAAOAdOjgAAMA7dHAAAIB34nIODoDMbcGCBQHr9KnvDRo0iEZzEECFChWs8smTJ9N9j5kzZ4arOYgwvTS8XLlykqtXrx6L5kQcb3AAAIB36OAAAADvMEQFIOxuu+02q6xfjXft2jXN/x1AeBUpUsQqHz16NEYtiQ3e4AAAAO/QwQEAAN6hgwMAALzDHBwAYde9e/egZQCINN7gAAAA79DBAQAA3smWmpoa+sXZsp0yxhz5yQsRCZVSU1Nv+qhlnmFM8QzjH88w/vEM419IzzBdHRwAAIB4wBAVAADwDh0cAADgHTo4AADAO3RwAACAd+jgAAAA79DBAQAA3qGDAwAAvEMHBwAAeIcODgAA8M7/AcT2XEQ/bnlmAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 576x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig,ax = plt.subplots(\n",
    "    nrows = 2,\n",
    "    ncols = 5,\n",
    "    sharex = True,\n",
    "    sharey = True,\n",
    "    figsize = (8,4)\n",
    ")\n",
    "ax = ax.flatten()\n",
    "for i in range(10):\n",
    "    for j in range(90, 500):\n",
    "        if mnist.train.labels[j] == i:\n",
    "            img = mnist.train.images[j].reshape(28,28)\n",
    "            ax[i].imshow(img, cmap='Greys', interpolation = 'nearest')\n",
    "            break\n",
    "ax[0].set_xticks([])\n",
    "ax[0].set_yticks([])\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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JX/++eee76l/9xCawJ+Z3gMqXHqvrsDFeqtVqybZa7HYeOIKCgBgEgUKAGCSuRZfNOmbOPW6fnpr8ED9+vWTfP/99/szsBxu+vTpkvUssN69e/vyfoHbieubC7XatWtL1mv86Rt1ERqvNdcWLFggecKECZ7n6+dKliwZvYElidmzZ4d03JEjRyTrGXr6v+vZeYH0Xk9lypQJZ4gxwRUUAMAkChQAwKSEa/HpLQPGjBkj+YcffpCsZyV16dLFdf6TTz7p4+gSQ1pamuTnn3/el/fQbYkzvYdeJ0zP6MubN68v40pGhw8flqx/X/SNvXfffbfrnAceeEBydta+RGj0v3+9JYeexap//nfccYfrfL0WpkVcQQEATKJAAQBMSogWn25B6Js433777aDH60vhAQMGuJ4709YO8Fd6errkHj16SA6cUaa31Vi9erXkihUr+ji65KVveN+9e7dkvSZj4Iy+UNfRTHa6Taq3JQm1Lfrll19K7tSpU9DzixcvLnnkyJGu863PcOUKCgBgEgUKAGASBQoAYFJCfAel93fy+t5JbzX90UcfSeY7p/jaunWr5BtuuEGy/t4psB+v++h87+SPyZMnS164cGHQY8aPHy85NTXV9zElolmzZknWU8Dz5cvnec6JEyckP/zww5K9vs969913JVeuXDn7g40DrqAAACZRoAAAJuXYFp++nNXbuXvRbYqCBQv6MiaE5ujRo5J79eolWS9wqen9pxzHce655x5/BpbkVq5cKVlP89ctpWbNmkm2uH9QTqNX4NBtuUD6753e8v2bb74JevzYsWMlN2rUKJIhxhVXUAAAkyhQAACTckyL79ixY67HHTp0kDxz5syg53Tt2lUybb340tu2Dx48WPIHH3wQ9Hjd7pg7d67rucKFC0d5dHAc9wKvuq2nVyLQs2TPNNMMoTn33OB/gvVMY8dxnA0bNkjWLT6tf//+kvWKOjkZV1AAAJMoUAAAk3JMiy9w2299g5u+kfOyyy6TrG8kRHy1bt1a8vz58896/BdffCG5Zs2avowpGen90hzHcfr16yf53//+d9Bzli9fLlkv1IvomjRpkuTu3bu7nvNaPFYvEDt06FB/BhZHXEEBAEyiQAEATDLd4vvxxx8lDxs2zPWc1yWv3t/J+l4niU7PvvNaz618+fKShwwZIvnKK6/0bVzJTO+d5jiO89xzzwU9rnHjxpJ12xyR++WXXyS/8sorknfu3Ck58O+bfly/fn3JEydOlHymG31zKq6gAAAmUaAAACaZbvHpS95A+nJ2ypQpku+9915fxwRvW7ZscT1u166dZH3jp95KY9CgQZL11uKIHj1z79lnn/U87vLLL5esb37XnxcilydPHsl58+aVPGHCBM9zLr74Ysl6+wyvG30TBf/yAAAmUaAAACaZvj7Uu+AGevnllyXrVhJi68CBA5JbtGjhes6rradbGR07dvRvcHAcx72O26hRozyPmzZtmuRixYr5OqZkpnfx3rdvX9BjKlSo4Hr82WefSU6m3Yu5ggIAmESBAgCYRIECAJhk+jsovYdT4CKXsGHq1KmS161b53mc3oJa79MFf2RlZUkOXIXFS9WqVf0aDjzMnj076H9/6623XI+T6XsnjSsoAIBJFCgAgEmmW3zI2a644grJejtx+E9P8T916pTkKlWquI7r0qWLZK8FmOEfrz248B9cQQEATKJAAQBMosWHiPTq1StoRnzpBUmnT58ex5EA2ccVFADAJAoUAMCkFH1D31kPTknZ5zjOVv+Gk9TKZ2VllYz0RfiMfMVnlDPwOdkX0mcUVoECACBWaPEBAEyiQAEATKJAAQBMokABAEyiQAEATKJAAQBMokABAEyiQAEATKJAAQBMokABAEyiQAEATKJAAQBMokABAEyiQAEATKJAAQBMokABAEw6N5yDU1NTs9LS0nwaSnLLyMhwMjMzUyJ9HT4jf6Wnp2dGulsrn5G/ovEZOQ6fk59C/XsXVoFKS0tzVq9enf1RwVOdOnWi8jp8Rv5KSUmJeAtwPiN/ReMzchw+Jz+F+veOFh8AwCQKFADAJAoUAMAkChQAwCQKFADAJAoUAMAkChQAwCQKFADAJAoUAMAkChQAwCQKFADAJAoUAMAkChQAwCQKFADAJAoUAMAkChQAwKSwNiwEAERm9+7dki+44ALJTZs2lTx//nzXOeeck5zXEsn5vxoAYB4FCgBgEi0+RGT27NmSO3fu7Hru8OHDkrOysiT369dPcvv27SVXq1bNjyEmpYMHD0rev39/2Odv2bJFcoUKFYIeM3nyZMnPPfec67lHHnlEcrFixST36dNHct68ecMeVyLQP6uUlBTJH330keTNmze7zrn44ov9H5hBXEEBAEyiQAEATKLFh7AdO3ZMsm5X/P77767jdPtC59GjR0t+5ZVXJL/wwguS77///pDG8u2330rWbZBChQqFdH5OdPr0acl6tteIESMkb9u2TbKeNRZNemZZvnz5XM/97W9/C3qO/rczZMgQX8Zl3XnnnXfWY55++mnX49KlS4f1HrqlXrhwYck9e/Z0Had/Tyy2XLmCAgCYRIECAJhEiw9h+/XXXyV/9dVXnsfptp6m2w8HDhyQ3KtXL8m6XXUmmzZtktyhQwfJr732Wkjn50S6rdeyZcugx+iW25133un5WpdeeqnkJk2aSH777bcl61mANWrUkHz33XdLrlSpkut1x4wZI3nAgAGSf/nlF8+xJIvevXtLXrp0qeSFCxdK1j//7NC/Y/r3MLB1qD/zUaNGSb7iiisiev9o4QoKAGASBQoAYJK5Ft+pU6ckZ2Zmeh63ceNGyT/++KPkmTNnStYzhkJVvXp1yTVr1pSclpYmWbdFLrzwQsnJsl5Wnjx5JOsZQocOHXIdd+2110rWs/30zb2vvvqqZN06DHytUHz66adBz9djTAQNGjSQ/Mknn0guW7asZL3GW9GiRcN+j0aNGoV1/PHjx12PFy1aFPQ43YZNVnq2nP67om9oDmzx6c82FPrnv2zZMsn65nnHcbcV9e/1vHnzwno/vyTHX1QAQI5DgQIAmESBAgCYFLfvoPSd7tOnT5c8depUyevWrZOsp006juNcddVVkq+77jrJbdq0kXzbbbdJ9vp+KLB3rhds1PSKBY8//rhk/R1Up06dJLdq1cp1vteU65yoRIkSkm+++WbJc+fO9TynTp06QbOecqunrOvvqd56662QxqX/TelVLRLtOyj987/pppviOJI/BX7fu3jxYskFCxaUrL8bg1vDhg0l672hskNPE3/sscckBy4cXLJkyYjex29cQQEATKJAAQBMimmLb+3atZIHDhwoecmSJZInTJgguWrVqpL1dEzHcbdtcuXKFbUxdunS5azH6LbUzp07JV9//fWS9fRfx3Gcl156KfLBJaBSpUpJ/stf/iK5efPmksePH+86p3HjxpJXr14tWa9mkGhtPYtOnDghuW/fvp7H6dUSypQp4+uYchr9N6Nr166S9a0EjuNeWFf/+w9X4C0HrVu3lrxgwQLJO3bskKy/xog1rqAAACZRoAAAJsW0xadbY23btpW8cuVKyXqGkl7JwZJzz/3zx1a+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\n",
      "text/plain": [
       "<Figure size 432x432 with 16 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig,ax = plt.subplots(\n",
    "    nrows = 4,\n",
    "    ncols = 4,\n",
    "    sharex = True,\n",
    "    sharey = True,\n",
    "    figsize = (6,6)\n",
    ")\n",
    "ax = ax.flatten()\n",
    "count = 0;\n",
    "\n",
    "for i in range(250):\n",
    "    if mnist.train.labels[i] == 7:\n",
    "        img = mnist.train.images[i].reshape(28,28)\n",
    "        ax[count].imshow(img, cmap = 'Greys', interpolation = 'nearest')\n",
    "        count +=1;\n",
    "        if count == 16:\n",
    "            break\n",
    "ax[0].set_xticks([])\n",
    "ax[0].set_yticks([])\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.35 0.84 1.   1.   1.   1.   0.84 0.11 0.02 0.   0.   0.   0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.   0.   0.01 0.43 0.99 0.99 0.98 0.95 0.96 0.99 0.99 0.99 0.82 0.09 0.   0.   0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.   0.   0.4  0.99 0.99 0.98 0.48 0.   0.12 0.58 0.98 0.99 0.99 0.82 0.05 0.   0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.   0.01 0.65 0.99 0.99 0.51 0.   0.   0.   0.   0.33 0.89 0.99 0.99 0.09 0.   0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.   0.1  0.99 0.99 0.83 0.12 0.   0.   0.   0.   0.   0.77 0.99 0.99 0.09 0.   0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.   0.41 0.99 0.97 0.29 0.   0.   0.   0.   0.   0.   0.13 0.9  0.99 0.47 0.01 0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.05 0.85 0.99 0.85 0.   0.   0.   0.   0.   0.   0.   0.   0.53 0.99 0.99 0.15 0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.07 0.99 0.99 0.85 0.   0.   0.   0.   0.   0.   0.   0.   0.37 0.99 0.99 0.55 0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.07 0.99 0.99 0.74 0.   0.   0.   0.   0.   0.   0.   0.   0.37 0.99 0.99 0.55 0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.44 0.99 0.99 0.36 0.   0.   0.   0.   0.   0.   0.   0.   0.37 0.99 0.99 0.55 0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.56 0.99 0.99 0.36 0.   0.   0.   0.   0.   0.   0.   0.   0.37 0.99 0.99 0.55 0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.56 0.99 0.99 0.36 0.   0.   0.   0.   0.   0.   0.   0.   0.37 0.99 0.99 0.55 0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.56 0.99 0.95 0.25 0.   0.   0.   0.   0.   0.   0.   0.   0.37 0.99 0.99 0.4  0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.56 0.99 0.97 0.3  0.   0.   0.   0.   0.   0.   0.   0.12 0.82 0.99 0.99 0.07 0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.38 0.99 0.99 0.78 0.   0.   0.   0.   0.   0.   0.   0.76 0.99 0.99 0.46 0.01 0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.07 0.99 0.99 0.85 0.   0.   0.   0.   0.   0.   0.47 0.97 0.99 0.84 0.06 0.   0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.04 0.82 0.99 0.98 0.58 0.13 0.   0.   0.   0.27 0.98 0.99 0.84 0.12 0.   0.   0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.   0.09 0.82 0.99 0.99 0.85 0.44 0.44 0.81 0.95 0.99 0.99 0.42 0.   0.   0.   0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.   0.   0.33 0.82 0.99 0.99 0.99 0.99 0.99 0.99 0.85 0.13 0.01 0.   0.   0.   0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.02 0.11 0.51 0.75 0.51 0.51 0.13 0.02 0.   0.   0.   0.   0.   0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.  ]\n",
      " [0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.  ]]\n"
     ]
    }
   ],
   "source": [
    "np.set_printoptions(precision=2, linewidth=256)\n",
    "print(mnist.train.images[10].reshape(28,28))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 理解: 数据已经进行了归一化,正好数据范围在0~1之间的float32"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([7, 3, 4, ..., 5, 6, 8], dtype=uint8)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mnist.train.labels"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 构建神经网络"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 定义神经网络 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 第一层:输入层, x:0-1(白,黑), y:0-9(未独热编码)\n",
    "#### 第二层:隐层(100个节点), W/b:方差为0,1的正态分布,ReLU激活\n",
    "#### 第三层:输出层(10个节点), W/b:依然是正态分布sigma为0,1,输出未激活"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 占位:图像,label,学习率\n",
    "x = tf.placeholder(\"float\", [None, 784])\n",
    "y = tf.placeholder(\"int64\", [None])\n",
    "learning_rate = tf.placeholder(\"float\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /home/surfman/.local/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Colocations handled automatically by placer.\n"
     ]
    }
   ],
   "source": [
    "#归一化\n",
    "def initialize(shape, stddev=0.1):\n",
    "  return tf.truncated_normal(shape, stddev=0.1)\n",
    "\n",
    "#隐层:100个神经元\n",
    "L1_units_count = 100\n",
    "\n",
    "W_1 = tf.Variable(initialize([784, L1_units_count]))\n",
    "b_1 = tf.Variable(initialize([L1_units_count]))\n",
    "logits_1 = tf.matmul(x, W_1) + b_1\n",
    "output_1 = tf.nn.relu(logits_1)\n",
    "\n",
    "#输出层:10个神经元\n",
    "L2_units_count = 10 \n",
    "W_2 = tf.Variable(initialize([L1_units_count, L2_units_count]))\n",
    "b_2 = tf.Variable(initialize([L2_units_count]))\n",
    "logits_2 = tf.matmul(output_1, W_2) + b_2  \n",
    "\n",
    "logits = logits_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "#损失函数使用交叉熵损失cross_entropy_loss,并使用函数tensorflow的sparse_softmax_cross_entropy_with_logits可以提高运行速度\n",
    "#反向传播的优化器使用随机梯度下降SGD优化器,学习率可以根据需要设定\n",
    "\n",
    "cross_entropy_loss = tf.reduce_mean(\n",
    "    tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y))\n",
    "\n",
    "optimizer = tf.train.GradientDescentOptimizer(\n",
    "    learning_rate=learning_rate).minimize(cross_entropy_loss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "#使用正确率评估性能,输出层logits是未经激活的,看概率分布,需要做softmax处理\n",
    "\n",
    "pred = tf.nn.softmax(logits)\n",
    "correct_pred = tf.equal(tf.argmax(pred, 1), y)\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "#用Saver保存或恢复训练模型的相关结果,特别是中间过程的训练参数\n",
    "batch_size = 32\n",
    "trainig_step = 1000\n",
    "\n",
    "saver = tf.train.Saver()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 100 training steps, the loss is 0.347995, the validation accuracy is 0.8778\n",
      "after 200 training steps, the loss is 0.234272, the validation accuracy is 0.9154\n",
      "after 300 training steps, the loss is 0.382621, the validation accuracy is 0.9128\n",
      "after 400 training steps, the loss is 0.318122, the validation accuracy is 0.9272\n",
      "after 500 training steps, the loss is 0.0242723, the validation accuracy is 0.9404\n",
      "after 600 training steps, the loss is 0.133716, the validation accuracy is 0.9436\n",
      "WARNING:tensorflow:From /home/surfman/.local/lib/python3.6/site-packages/tensorflow/python/training/saver.py:966: remove_checkpoint (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use standard file APIs to delete files with this prefix.\n",
      "after 700 training steps, the loss is 0.345766, the validation accuracy is 0.944\n",
      "after 800 training steps, the loss is 0.0635697, the validation accuracy is 0.953\n",
      "after 900 training steps, the loss is 0.20573, the validation accuracy is 0.9506\n",
      "the training is finish!\n",
      "the test accuarcy is: 0.953\n"
     ]
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "\n",
    "    #定义验证集与测试集\n",
    "    validate_data = {\n",
    "        x: mnist.validation.images,\n",
    "        y: mnist.validation.labels,\n",
    "    }\n",
    "    test_data = {x: mnist.test.images, y: mnist.test.labels}\n",
    "\n",
    "    #训练模型\n",
    "    for i in range(trainig_step):\n",
    "        xs, ys = mnist.train.next_batch(batch_size)\n",
    "        _, loss = sess.run(\n",
    "            [optimizer, cross_entropy_loss],\n",
    "            feed_dict={\n",
    "                x: xs,\n",
    "                y: ys,\n",
    "                learning_rate: 0.3\n",
    "            })\n",
    "\n",
    "        #每100次训练打印一次损失值与验证准确率\n",
    "        if i > 0 and i % 100 == 0:\n",
    "            validate_accuracy = sess.run(accuracy, feed_dict=validate_data)\n",
    "            print(\n",
    "                \"after %d training steps, the loss is %g, the validation accuracy is %g\"\n",
    "                % (i, loss, validate_accuracy))\n",
    "            saver.save(sess, './model.ckpt', global_step=i)\n",
    "\n",
    "    print(\"the training is finish!\")\n",
    "    #最终的测试准确率\n",
    "    acc = sess.run(accuracy, feed_dict=test_data)\n",
    "    print(\"the test accuarcy is:\", acc)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 理解:从训练结果看,loss损失的数值虽然一直在减少,但是并不是一直下降,损失函数无法有效收敛.其实就是学习率0.3设置不合理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /home/surfman/.local/lib/python3.6/site-packages/tensorflow/python/training/saver.py:1266: checkpoint_exists (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use standard file APIs to check for files with this prefix.\n",
      "INFO:tensorflow:Restoring parameters from ./model.ckpt-900\n",
      "0.9375\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state('./')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess, ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "            [pred, accuracy],\n",
    "            feed_dict={\n",
    "                x: mnist.test.images[:16],\n",
    "                y: mnist.test.labels[:16]\n",
    "            })\n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8, 8))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx, :][order]\n",
    "            plt.subplot(4, 4, idx + 1)\n",
    "            plt.axis('off')\n",
    "            plt.title('{}: [{}]-[{:.1f}%]'.format(mnist.test.labels[idx],\n",
    "                                                  order, prob * 100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28, 28)))\n",
    "\n",
    "    else:\n",
    "        pass"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 理解:模型效果比较差\n",
    "#### 训练次数比较少,32*1000=32000的数据参加了训练,没有全覆盖训练集\n",
    "#### 学习率设置为固定值,损失函数无法收敛,可以让学习率随训练次数衰减\n",
    "#### 隐层神经元太少"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
